package com.test.generics;

import test.Apple;
import test.Fruit;

import java.util.ArrayList;
import java.util.List;

/**
 * 原来泛型是不可变。即对于任何2个不同类型的type1和type2，List<Type1>即不是List<Type2>的子类型，也不是List<Type2>的超类型。（《effective java》第25条 ）
 *
 * 所以，Fruit和Apple虽是父子关系，但作为2个不同的类型，List<Apple>和List<Fruit>之间没有继承关系，所以2者之间无法转化。
 *
 */
public class UseGeneric02 {

    public static void main(String[] args) {
        List<Fruit> fruitBasket = new ArrayList<Fruit>();
        fruitBasket.add(new Fruit());
        getOutFruits(fruitBasket);//成功

        List<Apple> appleBasket = new ArrayList<Apple>();
        appleBasket.add(new Apple());
        //getOutFruits(appleBasket);//编译错误
        //getOutFruits((List<Fruit>) appleBasket);//强制类型转换，同样编译错误
        //不兼容的类型: List<Apple>无法转换为List<Fruit>
    }

    public static void getOutFruits(List<Fruit> basket){
        for (Fruit fruit : basket) {
            System.out.println(fruit);
            //...do something other
        }
    }
}
